/**
 * 安保管理API接口
 * 
 * 严格按照《App端编码规范权威标准声明.md》API调用规范实现：
 * - 方法名一致性：确保API调用方法名与API文件定义一致
 * - 参数格式正确：严格按照API接口要求传递参数
 * - 类型检查：使用JSDoc进行类型检查
 * - 接口文档：保持API文档与实际实现的一致性
 * - 错误处理：统一的错误处理机制
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */

import request from '@/api/request'

// ========================= 巡逻路线管理 =========================

/**
 * 分页查询巡逻路线
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {string} [params.routeName] - 路线名称
 * @param {string} [params.routeType] - 路线类型
 * @param {number} [params.status] - 状态
 * @returns {Promise<Object>} 分页结果
 */
export const getSecurityRoutePage = (params) => {
  return request.get('/api/work/security/route/page', params)
}

/**
 * 获取巡逻路线详情
 * @param {number} id - 路线ID
 * @returns {Promise<Object>} 路线详情
 */
export const getSecurityRouteById = (id) => {
  return request.get(`/api/work/security/route/${id}`)
}

/**
 * 创建巡逻路线
 * @param {Object} data - 路线信息
 * @returns {Promise<Object>} 创建结果
 */
export const createSecurityRoute = (data) => {
  return request.post('/api/work/security/route', data)
}

/**
 * 更新巡逻路线
 * @param {number} id - 路线ID
 * @param {Object} data - 路线信息
 * @returns {Promise<Object>} 更新结果
 */
export const updateSecurityRoute = (id, data) => {
  return request.put(`/api/work/security/route/${id}`, data)
}

/**
 * 删除巡逻路线
 * @param {number} id - 路线ID
 * @returns {Promise<Object>} 删除结果
 */
export const deleteSecurityRoute = (id) => {
  return request.delete(`/api/work/security/route/${id}`)
}

// ========================= 巡逻记录管理 =========================

/**
 * 分页查询巡逻记录
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {number} [params.userId] - 用户ID
 * @param {number} [params.routeId] - 路线ID
 * @param {number} [params.status] - 状态
 * @param {string} [params.startDate] - 开始日期
 * @param {string} [params.endDate] - 结束日期
 * @returns {Promise<Object>} 分页结果
 */
export const getSecurityPatrolPage = (params) => {
  return request.get('/api/work/security/patrol/page', params)
}

/**
 * 查询用户巡逻记录
 * @param {number} userId - 用户ID
 * @param {string} [startDate] - 开始日期
 * @param {string} [endDate] - 结束日期
 * @returns {Promise<Object>} 巡逻记录列表
 */
export const getSecurityPatrolByUserId = (userId, startDate, endDate) => {
  return request.get(`/api/work/security/patrol/user/${userId}`, { startDate, endDate })
}

/**
 * 开始巡逻
 * @param {Object} data - 巡逻信息
 * @returns {Promise<Object>} 开始结果
 */
export const startSecurityPatrol = (data) => {
  return request.post('/api/work/security/patrol/start', data)
}

/**
 * 巡逻签到
 * @param {number} patrolId - 巡逻记录ID
 * @param {number} checkPointId - 签到点ID
 * @param {string} checkTime - 签到时间
 * @param {string} [remark] - 签到备注
 * @returns {Promise<Object>} 签到结果
 */
export const patrolCheckIn = (patrolId, checkPointId, checkTime, remark) => {
  return request.put(`/api/work/security/patrol/${patrolId}/check`, { checkPointId, checkTime, remark })
}

/**
 * 结束巡逻
 * @param {number} patrolId - 巡逻记录ID
 * @param {string} endTime - 结束时间
 * @param {string} [summary] - 巡逻总结
 * @returns {Promise<Object>} 结束结果
 */
export const endSecurityPatrol = (patrolId, endTime, summary) => {
  return request.put(`/api/work/security/patrol/${patrolId}/end`, { endTime, summary })
}

// ========================= 安全事件管理 =========================

/**
 * 分页查询安全事件
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {string} [params.eventType] - 事件类型
 * @param {number} [params.severity] - 严重程度
 * @param {number} [params.status] - 状态
 * @param {string} [params.startDate] - 开始日期
 * @param {string} [params.endDate] - 结束日期
 * @returns {Promise<Object>} 分页结果
 */
export const getSecurityEventPage = (params) => {
  return request.get('/api/work/security/event/page', params)
}

/**
 * 获取安全事件详情
 * @param {number} id - 事件ID
 * @returns {Promise<Object>} 事件详情
 */
export const getSecurityEventById = (id) => {
  return request.get(`/api/work/security/event/${id}`)
}

/**
 * 上报安全事件
 * @param {Object} data - 事件信息
 * @returns {Promise<Object>} 上报结果
 */
export const reportSecurityEvent = (data) => {
  return request.post('/api/work/security/event', data)
}

/**
 * 处理安全事件
 * @param {number} eventId - 事件ID
 * @param {number} handlerId - 处理人ID
 * @param {string} handleResult - 处理结果
 * @param {string} [handleRemark] - 处理备注
 * @returns {Promise<Object>} 处理结果
 */
export const handleSecurityEvent = (eventId, handlerId, handleResult, handleRemark) => {
  return request.put(`/api/work/security/event/${eventId}/handle`, { handlerId, handleResult, handleRemark })
}

// ========================= 访客管理 =========================

/**
 * 分页查询访客记录
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {string} [params.visitorName] - 访客姓名
 * @param {string} [params.visitDate] - 访问日期
 * @param {number} [params.status] - 状态
 * @returns {Promise<Object>} 分页结果
 */
export const getVisitorPage = (params) => {
  return request.get('/api/work/security/visitor/page', params)
}

/**
 * 访客登记
 * @param {Object} data - 访客信息
 * @returns {Promise<Object>} 登记结果
 */
export const registerVisitor = (data) => {
  return request.post('/api/work/security/visitor', data)
}

/**
 * 访客离开
 * @param {number} visitorId - 访客记录ID
 * @param {string} leaveTime - 离开时间
 * @returns {Promise<Object>} 离开结果
 */
export const visitorLeave = (visitorId, leaveTime) => {
  return request.put(`/api/work/security/visitor/${visitorId}/leave`, { leaveTime })
}

// ========================= 统计查询 =========================

/**
 * 获取安保统计信息
 * @param {string} [startDate] - 开始日期
 * @param {string} [endDate] - 结束日期
 * @returns {Promise<Object>} 统计信息
 */
export const getSecurityStatistics = (startDate, endDate) => {
  return request.get('/api/work/security/statistics', { startDate, endDate })
}

/**
 * 获取用户安保统计
 * @param {number} userId - 用户ID
 * @param {string} [startDate] - 开始日期
 * @param {string} [endDate] - 结束日期
 * @returns {Promise<Object>} 用户统计信息
 */
export const getUserSecurityStatistics = (userId, startDate, endDate) => {
  return request.get(`/api/work/security/statistics/user/${userId}`, { startDate, endDate })
}